1. Field of the Invention
The invention relates to computer systems and computer software, and more particularly to transaction management in computer systems.
2. Description of the Related Art
Computer programs executing on application servers may need to access and modify data sources coupled to the application server. A data source may be an interface to a resource manager, such as a database. The terms resource manager and data source may be used interchangeably. Before a program starts, an application server may start a new transaction and open connections to needed data sources. When application servers establish a connection to a data source, the connection can be opened as a non-global transaction connection or a global transaction connection. A non-global transaction involving a one phase commit may be used when accessing only one data source. A global transaction involving a two phase commit may be used when accessing two or more different data sources. In conventional systems, once the application server opens a specific type of connection (i.e. non-global or global) the connection type may be restricted to the initial connection type.
Non-global transactions may be managed by a resource manager. Global transactions may be managed by an external transaction manager such as a Java Transaction server on an application server. Global transactions may also involve a two phase commit protocol. Before a transaction is committed to the connected data sources, each data source may be asked to prepare to commit. If each data source is able to commit, it may send a signal to the transaction manager indicating so. After all of the data sources have indicated that they are prepared to commit, the transaction manager may send a signal to commit the transaction and record the transaction in a transaction log. If the data source is prepared to commit, it commits the transaction when instructed to by the application server. Non-global transactions involving one data source do not need to use the first phase (i.e. asking if the data source is prepared to commit).
A transaction log may be updated with information on transactions that have been committed. The information for a committed transaction may be sent to the data source that failed during the commit to allow the data source to update itself. If a transaction fails, or doesn't commit, the data sources involved may be rolled back. The data sources may return their stored data to the state the data was in before the transaction started.
When a read-only data source is connected to by an application as part of a global transaction, it's participation in a transaction may be optimized during the two-phase commit process. A read-only data source may indicate it is read-only when a transaction manager starts the two phase commit protocol (e.g. during the prepare phase). The commit phase may be skipped for a read-only resource in a global transaction since its state is not modified.